package com.xbongbong.saas.domain.dao;

import com.xbongbong.saas.domain.entity.CallCenterStatementEntity;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * @author youli.chen
 * @version v1.0
 * @description: 话务中心坐席策略对账单表DAO
 * @date 2019/2/27 17:29
 * @since v1.0
 */
public interface CallCenterStatementDao {

    /**
     * 新增话务中心坐席策略对账单
     * @param callCenterStatement  话务中心坐席策略对账单表实体类
     * @return
     */
    Integer insert(CallCenterStatementEntity callCenterStatement);

    /**
     * 批量新增话务中心坐席策略对账单
     * @param callCenterStatementList 务中心坐席策略对账单表实体类列表
     */
    void insertBatch(List<CallCenterStatementEntity> callCenterStatementList);

    /**
     * 更新话务中心坐席策略对账单
     * @param callCenterStatement  话务中心坐席策略对账单表实体类
     * @return
     */
    Integer update(CallCenterStatementEntity callCenterStatement);

    /**
     *  根据ID查询话务中心坐席策略对账单详情
     * @param key 主键
     * @param corpid  公司ID
     * @return
     */
    CallCenterStatementEntity getByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     * 根据ID删除话务中心坐席策略对账单
     * @param key 主键
     * @param corpid  公司ID
     * @return
     */
    Integer deleteByKey(@Param("key") Long key, @Param("corpid") String corpid);

    /**
     * 根据条件查询话务中心坐席策略对账单列表
     * @param param 条件
     * @return
     */
    List<CallCenterStatementEntity> findEntitys(@Param("param") Map<String, Object> param);

    /**
     * 根据条件统计话务中心坐席策略对账单
     * @param param 条件
     * @return
     */
    Integer getEntitysCount(@Param("param") Map<String, Object> param);

    /**
     * 对账并得到余额
     *
     * @param corpid 公司ID
     * @param moduleType 微应用类型
     *
     * @return 对账余额
     * @author 章华隽
     * 创建时间：2018/3/27 下午5:30
     * 修改时间：
     * @version 3.20
     * @since 3.20
     */
    BigDecimal checkBillBalance(@Param("corpid") String corpid, @Param("moduleType") Integer moduleType);

    /**
     * 统计该公司当月已缴费的坐席总数 youli.chen
     * 创建时间：2018/6/15
     */
    Integer totalPaidAgentNum(@Param("corpid") String corpid, @Param("moduleType") Integer moduleType,
                              @Param("startAddTime") Integer startAddTime, @Param("endAddTime") Integer endAddTime);

    /**
     * 获取制定时间的账单
     *
     * @param corpid       公司id
     * @param moduleType   微应用平台
     * @param type         对账单类型，参考CallCenterConstant
     * @param startAddTime 开始时间
     * @param endAddTime   结束时间
     *
     * @return 对账金额，取绝对值
     * @author 章华隽
     * 创建时间：2018/3/29 上午11:10
     * 修改时间：
     * @version 3.20
     * @since 3.20
     */
    BigDecimal checkRangeAmount(@Param("corpid") String corpid, @Param("moduleType") Integer moduleType, @Param("type") Integer type,
                                @Param("startAddTime") Integer startAddTime, @Param("endAddTime") Integer endAddTime);
}
